home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-02 / icndrw_1.zip / SOURCE.ZIP / MOUSE.PAS < prev    next >
Pascal/Delphi Source File  |  1991-08-20  |  8KB  |  444 lines

  1. {-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  2.  
  3.                       ===============================
  4.                       Microsoft Compatible Mouse Unit
  5.                            For Turbo Pascal 6.0
  6.                       ===============================
  7.  
  8.                       Copyright (c) 1991 - SofDesign Technology
  9.                       All Rights Reserved
  10.  
  11.  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-}
  12.  
  13. unit mouse;
  14.  
  15. {$O-}
  16. {$R-}
  17. {$S-}
  18. {$A+}
  19. {$B-}
  20. {$F-}
  21.  
  22. interface
  23.  
  24. uses dos;
  25.  
  26. type
  27.  mouseshape=record
  28.              hotx,hoty:word;
  29.              shape,mask:array[1..16] of word;
  30.             end;
  31.  
  32. function  driverinstalled:boolean;
  33. function  resetmouse:integer;
  34. procedure showmouse;
  35. procedure hidemouse;
  36. procedure getmouse (var x,y,b:word);
  37. procedure setmouse (x,y:word);
  38. procedure getbuttonpress (whichbutton:word;
  39.                           var status,presses,xpress,ypress:word);
  40. procedure getbuttonrelease (whichbutton:word;
  41.                             var status,presses,xrelease,yrelease:word);
  42. procedure hmouselimit (min,max:word);
  43. procedure vmouselimit (min,max:word);
  44. procedure setmouseshape (var form:mouseshape);
  45. procedure settextcursor (cursorselect,screenmask,cursormask:word);
  46. procedure readcounters (var hmickey,vmickey:word);
  47. procedure setinterrupt (routine:pointer; mask:word);
  48. procedure emulatepen;
  49. procedure stopemulatepen;
  50. procedure setmickeyratio (xmickey,ymickey:word);
  51. procedure conditionaloff (x1,y1,x2,y2:word);
  52. procedure setthreshold (mickeys:word);
  53. procedure swapinterruptroutines (var routine:pointer; var mask:word);
  54. function  statebuffersize:word;
  55. procedure savestate (var buffer);
  56. procedure restorestate (var buffer);
  57. function  setaltinterrupt (routine:pointer; mask:word):boolean;
  58. function  getaltinterrupt (oldmask:word; var routinemask:word;
  59.                           var routine:pointer):boolean;
  60. procedure setsensitivity (xmickey,ymickey,threshold:word);
  61. procedure getsensitivity (var xmickey,ymickey,threshold:word);
  62. procedure setinterruptrate (rate:word);
  63. procedure setcrtpage (page:word);
  64. function  getcrtpage:word;
  65. function  disabledriver (var oldint33:pointer):boolean;
  66. procedure enabledriver;
  67. function  softwarereset:boolean;
  68. procedure setlanguage(language:word);
  69. function  getlanguage:word;
  70. procedure getvertypeirq (var version,mousetype,irqnumber:word);
  71.  
  72.  
  73. implementation
  74.  
  75. function driverinstalled:boolean;
  76. var
  77.  r:registers;
  78. begin
  79.  r.ax:=$3533;
  80.  msdos(r);
  81.  driverinstalled:=not((r.es=0) and (r.bx=0) or (mem[r.es:r.bx]=207));
  82. end;
  83.  
  84. function resetmouse:integer;
  85. var
  86.  r:registers;
  87. begin
  88.  r.ax:=0;
  89.  intr($33,r);
  90.  if integer(r.ax)=-1 then resetmouse:=integer(r.bx) else resetmouse:=0;
  91. end;
  92.  
  93. procedure showmouse;
  94. var
  95.  r:registers;
  96. begin
  97.  r.ax:=1;
  98.  intr($33,r);
  99. end;
  100.  
  101. procedure hidemouse;
  102. var
  103.  r:registers;
  104. begin
  105.  r.ax:=2;
  106.  intr($33,r);
  107. end;
  108.  
  109. procedure getmouse (var x,y,b:word);
  110. var
  111.  r:registers;
  112. begin
  113.  r.ax:=3;
  114.  intr($33,r);
  115.  x:=r.cx;
  116.  y:=r.dx;
  117.  b:=r.bx;
  118. end;
  119.  
  120. procedure setmouse (x,y:word);
  121. var
  122.  r:registers;
  123. begin
  124.  r.ax:=4;
  125.  r.cx:=x;
  126.  r.dx:=y;
  127.  intr($33,r);
  128. end;
  129.  
  130. procedure getbuttonpress (whichbutton:word;
  131.                           var status,presses,xpress,ypress:word);
  132. var
  133.  r:registers;
  134. begin
  135.  r.ax:=5;
  136.  r.bx:=whichbutton;
  137.  intr($33,r);
  138.  status:=r.ax;
  139.  presses:=r.bx;
  140.  xpress:=r.cx;
  141.  ypress:=r.dx;
  142. end;
  143.  
  144. procedure getbuttonrelease (whichbutton:word;
  145.                             var status,presses,xrelease,yrelease:word);
  146. var
  147.  r:registers;
  148. begin
  149.  r.ax:=6;
  150.  r.bx:=whichbutton;
  151.  intr($33,r);
  152.  status:=r.ax;
  153.  presses:=r.bx;
  154.  xrelease:=r.cx;
  155.  yrelease:=r.dx;
  156. end;
  157.  
  158. procedure hmouselimit (min,max:word);
  159. var
  160.  r:registers;
  161. begin
  162.  r.ax:=7;
  163.  r.cx:=min;
  164.  r.dx:=max;
  165.  intr($33,r);
  166. end;
  167.  
  168. procedure vmouselimit (min,max:word);
  169. var
  170.  r:registers;
  171. begin
  172.  r.ax:=8;
  173.  r.cx:=min;
  174.  r.dx:=max;
  175.  intr($33,r);
  176. end;
  177.  
  178. procedure setmouseshape (var form:mouseshape);
  179. var
  180.  r:registers;
  181. begin
  182.  r.ax:=9;
  183.  r.bx:=form.hotx;
  184.  r.cx:=form.hoty;
  185.  r.ds:=seg(form.shape);
  186.  r.es:=r.ds;
  187.  r.dx:=ofs(form.shape);
  188.  intr($33,r);
  189. end;
  190.  
  191. procedure settextcursor (cursorselect,screenmask,cursormask:word);
  192. var
  193.  r:registers;
  194. begin
  195.  r.ax:=10;
  196.  r.bx:=cursorselect;
  197.  r.cx:=screenmask;
  198.  r.dx:=cursormask;
  199.  intr($33,r);
  200. end;
  201.  
  202. procedure readcounters (var hmickey,vmickey:word);
  203. var
  204.  r:registers;
  205. begin
  206.  r.ax:=11;
  207.  intr($33,r);
  208.  hmickey:=r.cx;
  209.  vmickey:=r.dx;
  210. end;
  211.  
  212. procedure setinterrupt (routine:pointer; mask:word);
  213. var
  214.  r:registers;
  215. begin
  216.  r.ax:=12;
  217.  r.cx:=mask;
  218.  r.dx:=ofs(routine^);
  219.  r.es:=seg(routine^);
  220.  intr($33,r);
  221. end;
  222.  
  223. procedure emulatepen;
  224. var
  225.  r:registers;
  226. begin
  227.  r.ax:=13;
  228.  intr($33,r);
  229. end;
  230.  
  231. procedure stopemulatepen;
  232. var
  233.  r:registers;
  234. begin
  235.  r.ax:=14;
  236.  intr($33,r);
  237. end;
  238.  
  239. procedure setmickeyratio (xmickey,ymickey:word);
  240. var
  241.  r:registers;
  242. begin
  243.  r.ax:=15;
  244.  r.cx:=xmickey;
  245.  r.dx:=ymickey;
  246.  intr($33,r);
  247. end;
  248.  
  249. procedure conditionaloff (x1,y1,x2,y2:word);
  250. var
  251.  r:registers;
  252. begin
  253.  r.ax:=16;
  254.  r.cx:=x1;
  255.  r.dx:=y1;
  256.  r.si:=x2;
  257.  r.di:=y2;
  258.  intr($33,r);
  259. end;
  260.  
  261. procedure setthreshold (mickeys:word);
  262. var
  263.  r:registers;
  264. begin
  265.  r.ax:=19;
  266.  r.dx:=mickeys;
  267.  intr($33,r);
  268. end;
  269.  
  270. procedure swapinterruptroutines (var routine:pointer; var mask:word);
  271. var
  272.  r:registers;
  273. begin
  274.  r.ax:=20;
  275.  r.bx:=seg(routine^);
  276.  r.cx:=mask;
  277.  r.dx:=ofs(routine^);
  278.  intr($33,r);
  279. end;
  280.  
  281. function statebuffersize:word;
  282. var
  283.  r:registers;
  284. begin
  285.  r.ax:=21;
  286.  intr($33,r);
  287.  statebuffersize:=r.bx;
  288. end;
  289.  
  290. procedure savestate (var buffer);
  291. var
  292.  r:registers;
  293. begin
  294.  r.ax:=22;
  295.  r.es:=seg(buffer);
  296.  r.ds:=r.es;
  297.  r.dx:=ofs(buffer);
  298.  intr($33,r);
  299. end;
  300.  
  301. procedure restorestate (var buffer);
  302. var
  303.  r:registers;
  304. begin
  305.  r.ax:=23;
  306.  r.es:=seg(buffer);
  307.  r.ds:=r.es;
  308.  r.dx:=ofs(buffer);
  309.  intr($33,r);
  310. end;
  311.  
  312. function setaltinterrupt (routine:pointer; mask:word):boolean;
  313. var
  314.  r:registers;
  315. begin
  316.  r.ax:=24;
  317.  r.cx:=mask;
  318.  r.dx:=ofs(routine^);
  319.  r.es:=seg(routine^);
  320.  intr($33,r);
  321.  setaltinterrupt:=integer(r.ax)<>-1;
  322. end;
  323.  
  324. function getaltinterrupt (oldmask:word; var routinemask:word;
  325.                           var routine:pointer):boolean;
  326. var
  327.  r:registers;
  328. begin
  329.  r.ax:=25;
  330.  r.cx:=oldmask;
  331.  intr($33,r);
  332.  getaltinterrupt:=integer(r.ax)<>-1;
  333.  routine:=ptr(r.bx,r.dx);
  334.  routinemask:=r.cx;
  335. end;
  336.  
  337. procedure setsensitivity (xmickey,ymickey,threshold:word);
  338. var
  339.  r:registers;
  340. begin
  341.  r.ax:=26;
  342.  r.bx:=xmickey;
  343.  r.cx:=ymickey;
  344.  r.dx:=threshold;
  345.  intr($33,r);
  346. end;
  347.  
  348. procedure getsensitivity (var xmickey,ymickey,threshold:word);
  349. var
  350.  r:registers;
  351. begin
  352.  r.ax:=27;
  353.  intr($33,r);
  354.  xmickey:=r.bx;
  355.  ymickey:=r.cx;
  356.  threshold:=r.dx;
  357. end;
  358.  
  359. procedure setinterruptrate (rate:word);
  360. var
  361.  r:registers;
  362. begin
  363.  r.ax:=28;
  364.  if rate>4 then r.bx:=4 else r.bx:=rate;
  365.  intr($33,r);
  366. end;
  367.  
  368. procedure setcrtpage (page:word);
  369. var
  370.  r:registers;
  371. begin
  372.  r.ax:=29;
  373.  r.bx:=page;
  374.  intr($33,r);
  375. end;
  376.  
  377. function getcrtpage:word;
  378. var
  379.  r:registers;
  380. begin
  381.  r.ax:=30;
  382.  intr($33,r);
  383.  getcrtpage:=r.bx;
  384. end;
  385.  
  386. function disabledriver (var oldint33:pointer):boolean;
  387. var
  388.  r:registers;
  389. begin
  390.  r.ax:=31;
  391.  intr($33,r);
  392.  oldint33:=ptr(r.cx,r.bx);
  393.  disabledriver:=integer(r.ax)<>-1;
  394. end;
  395.  
  396. procedure enabledriver;
  397. var
  398.  r:registers;
  399. begin
  400.  r.ax:=32;
  401.  intr($33,r);
  402. end;
  403.  
  404. function softwarereset:boolean;
  405. var
  406.  r:registers;
  407. begin
  408.  r.ax:=33;
  409.  intr($33,r);
  410.  softwarereset:=(integer(r.ax)=-1) and (r.bx=2);
  411. end;
  412.  
  413. procedure setlanguage(language:word);
  414. var
  415.  r:registers;
  416. begin
  417.  r.ax:=34;
  418.  r.bx:=language;
  419.  intr($33,r);
  420. end;
  421.  
  422. function getlanguage:word;
  423. var
  424.  r:registers;
  425. begin
  426.  r.ax:=35;
  427.  intr($33,r);
  428.  getlanguage:=r.bx;
  429. end;
  430.  
  431. procedure getvertypeirq (var version,mousetype,irqnumber:word);
  432. var
  433.  r:registers;
  434. begin
  435.  r.ax:=36;
  436.  intr($33,r);
  437.  version:=r.bx;
  438.  mousetype:=r.ch;
  439.  irqnumber:=r.cl;
  440. end;
  441.  
  442. end.
  443.  
  444.